/**
 * author: Hanflyee  flyee1980@163.com
 * vision: v1.0
 * data: 2009-7-9
 */
package com.flyee.service{
	
	import com.flyee.communicate.scene.GetSceneCommunicate;
	import com.flyee.controller.ComponentController;
	import com.flyee.controller.SceneController;
	import com.flyee.model.Component;
	import com.flyee.model.Scene;
	import com.flyee.service.pool.ObjectCollection;
	import com.flyee.utils.Map;
	import com.flyee.utils.Obsevable;
	import com.flyee.utils.Obsever;
	
	/**
	 * 场景管理类
	 */
	public class SceneService extends Obsevable implements Obsever{

		[Inject]
		public var sceneController : SceneController;
		[Inject]
		public var componentController : ComponentController;
		[Inject]
		public var getSceneCommunicate : GetSceneCommunicate;
		
		public function SceneService(){	
		}

		/**注册观察者*/
		public function registeObsever() : void {
			componentController.addObserver(sceneController);
			sceneController.addObserver(componentController);
		}
		
		/**
	     * 接到被观察者通知后执行
	     * @param o 被观察者
	     * @param command 指令
	     * @param args 参数
	     */
	    public function execute(o : Obsevable, command : String = null, args : * = null) : void {
	        switch (command) {
	            case "loadScene" :
	                loadScene(args[0], args[1]);
	                break;
	            case "getScene" :
	                getScene(args[0]);
	                break;
	            default :
	                //MyLog.debug("command is null!");
	                break;
	        }
	    }
		
		/**取得场景信息*/
		public function getScene(sceneId : String) : void{
			getSceneCommunicate.request(sceneId);
		}
		
		/**加载场景*/
		public function loadScene(scene : Scene, componentMap : Map) : void {
			sceneController.loadScene(scene);
			for each(var comp : Component in componentMap.values()){
				componentController.loadComponent(comp);
			}
			//请求初始化人物加到显示场景中
//			this.setChanged();
//			this.notifyObsevers("initAvatars", ObjectCollection.bufferArray);			
		}
		
		/**切换场景*/
		public function switchScene(sceneId : String) : void {
			sceneController.unloadScene();
			getScene(sceneId);
		}
		
	}
	
}